<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>CANtegrity API</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="kvaser.gif"/></td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__kvdiag__diagnostics.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">CANtegrity API<div class="ingroups"><a class="el" href="group__grp__canlib.html">CANlib</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>CANtegrity API.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga926f63f2ccb0b56ff4917151ab5e27fe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga926f63f2ccb0b56ff4917151ab5e27fe">kvDiagGetNumberOfAnalyzers</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, int *analyzerCount)</td></tr>
<tr class="separator:ga926f63f2ccb0b56ff4917151ab5e27fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga348f389077d77b8fd4cf04ad53558aad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga348f389077d77b8fd4cf04ad53558aad">kvDiagGetAnalyzerInfo</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, <a class="el" href="structkv_analyzer_info__t.html">kvAnalyzerInfo_t</a> *info)</td></tr>
<tr class="separator:ga348f389077d77b8fd4cf04ad53558aad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76d09ccb89cf756d954144582f730330"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, int type)</td></tr>
<tr class="separator:ga76d09ccb89cf756d954144582f730330"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga61263295b3feaad95c257eef05a9579b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga61263295b3feaad95c257eef05a9579b">kvDiagDetachAnalyzer</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd)</td></tr>
<tr class="separator:ga61263295b3feaad95c257eef05a9579b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad615ea3768542e4d48f10d0dca4ef46d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, int programType, const char *const configBuffer)</td></tr>
<tr class="separator:gad615ea3768542e4d48f10d0dca4ef46d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9cb62a80b9ffe4ea80b22acfb49bd3a4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd)</td></tr>
<tr class="separator:ga9cb62a80b9ffe4ea80b22acfb49bd3a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga685c95a3e168601a28e680d9c820dd8a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga685c95a3e168601a28e680d9c820dd8a">kvDiagStop</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd)</td></tr>
<tr class="separator:ga685c95a3e168601a28e680d9c820dd8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43a268ee89c38c3ac496d20f35a48105"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga43a268ee89c38c3ac496d20f35a48105">kvDiagReadSample</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, <a class="el" href="structkv_diag_sample.html">kvDiagSample</a> *sample)</td></tr>
<tr class="separator:ga43a268ee89c38c3ac496d20f35a48105"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaab9b2bc0856a7200d1f76533092eb023"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#gaab9b2bc0856a7200d1f76533092eb023">kvDiagReadSampleWait</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, <a class="el" href="structkv_diag_sample.html">kvDiagSample</a> *sample, int timeout)</td></tr>
<tr class="separator:gaab9b2bc0856a7200d1f76533092eb023"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabc77cf695c7fb518263d32539a3aec9e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#gabc77cf695c7fb518263d32539a3aec9e">kvDiagCalculateBitrate</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, <a class="el" href="structbitrates__t.html">bitrates_t</a> *btr)</td></tr>
<tr class="separator:gabc77cf695c7fb518263d32539a3aec9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga65bbdc1e8c8bf4affc8ba2041d72ff1a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga65bbdc1e8c8bf4affc8ba2041d72ff1a">kvDiagResetBitrateCalculation</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd)</td></tr>
<tr class="separator:ga65bbdc1e8c8bf4affc8ba2041d72ff1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga243548139dcbb64ff273648dd0c370dd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga243548139dcbb64ff273648dd0c370dd">kvDiagCalculateClockOffset</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd, int id, double *fMin, double *fMax, double *fMean, double *fStd, int *n)</td></tr>
<tr class="separator:ga243548139dcbb64ff273648dd0c370dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1708e589eb731c11c82a621b2a070d1d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__kvdiag__diagnostics.html#ga1708e589eb731c11c82a621b2a070d1d">kvDiagResetClockOffsetCalculation</a> (const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a> canHnd)</td></tr>
<tr class="separator:ga1708e589eb731c11c82a621b2a070d1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>CANtegrity API. </p>
<p>The kvDiagXxx functions specify the CANtegrity API, which is based on high frequency sampling of the CAN bus. To check if a device has CANtegrity support, use <a class="el" href="group__can__general.html#gab9552d1a588b0dbc144b097acba017b2">canGetChannelData()</a> with the item <a class="el" href="canlib_8h.html#a7eeb70e7c666f629ca3762f4692469ae">canCHANNELDATA_CHANNEL_CAP</a> and the flag <a class="el" href="canlib_8h.html#a8cc8a1a1960813e55b753943274d1006">canCHANNEL_CAP_CANTEGRITY</a>. </p>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga76d09ccb89cf756d954144582f730330"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga76d09ccb89cf756d954144582f730330">&#9670;&nbsp;</a></span>kvDiagAttachAnalyzer()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagAttachAnalyzer </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Attach an analyzer to the a CAN channel handle. The device needs to have the CANtegrity capability. See <a class="el" href="page_user_guide_kvdiag.html">CANtegrity API (kvDiag)</a> for how to check this.</p>
<dl class="section note"><dt>Note</dt><dd>A CAN channel can currently only have one attached Analyzer.</dd>
<dd>
The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel of a KSI capable device. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>DIAG_ANALYZER_TYPE_XXX.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga61263295b3feaad95c257eef05a9579b">kvDiagDetachAnalyzer()</a> </dd></dl>

</div>
</div>
<a id="gabc77cf695c7fb518263d32539a3aec9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabc77cf695c7fb518263d32539a3aec9e">&#9670;&nbsp;</a></span>kvDiagCalculateBitrate()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagCalculateBitrate </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structbitrates__t.html">bitrates_t</a> *&#160;</td>
          <td class="paramname"><em>btr</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Run with <a class="el" href="kv_diag_8h.html#a64bb36d4e56a896eb2af5dc09cce1542">DIAG_PROGRAM_TYPE_AUTOBAUD</a>, see <a class="el" href="page_user_guide_kvdiag.html">CANtegrity API (kvDiag)</a>.</p>
<p>Calculate the bitrate on the CAN bus by sampling a series of CAN frames. Uses all the sampled frames in the device buffer on each call. Stores information between calls. May require several calls until the quality value is sufficiently high.</p>
<dl class="section note"><dt>Note</dt><dd>The Analyzer program <a class="el" href="kv_diag_8h.html#a64bb36d4e56a896eb2af5dc09cce1542">DIAG_PROGRAM_TYPE_AUTOBAUD</a> will stop processing after 100 frames have been received. To restart processing, call <a class="el" href="group__kvdiag__diagnostics.html#ga65bbdc1e8c8bf4affc8ba2041d72ff1a">kvDiagResetBitrateCalculation()</a>.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>For classic CAN <em>btr.bitrate</em> contains the calculated bitrate and quality. Currently, FD is not supported so <em>btr.bitrate_brs</em> can be disregarded.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">btr</td><td>Contains two sets of values for bitrate and quality.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga65bbdc1e8c8bf4affc8ba2041d72ff1a">kvDiagResetBitrateCalculation()</a> </dd></dl>

</div>
</div>
<a id="ga243548139dcbb64ff273648dd0c370dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga243548139dcbb64ff273648dd0c370dd">&#9670;&nbsp;</a></span>kvDiagCalculateClockOffset()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagCalculateClockOffset </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>fMin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>fMax</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>fMean</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>fStd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>n</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Run with <a class="el" href="kv_diag_8h.html#ad24c2e14068b790b7b105c6423e42400">DIAG_PROGRAM_TYPE_NORMAL</a>, see <a class="el" href="page_user_guide_kvdiag.html">CANtegrity API (kvDiag)</a>.</p>
<p>Get the clock offset of a device relative to the clock of the measuring device. This roughly equates to the relative difference of the two frequencies.</p>
<div class="fragment"><div class="line">clockoffset = (T_id - T_diag) / T_diag = (f_diag - f_id) / f_id</div></div><!-- fragment --><p>where </p><div class="fragment"><div class="line">T_diag     Time elapsed on the measuring device.</div><div class="line"></div><div class="line">T_id       Time elapsed on the target device.</div><div class="line"></div><div class="line">f_diag     Frequency of the measuring device.</div><div class="line"></div><div class="line">f_id       Frequency of the target device.</div></div><!-- fragment --><p>The result is expressed as a normal distribution over the sampled frames used. The unit of measurement is ppt (parts per trillion, 1e-12).</p>
<p>The function stores information between calls. Call until sufficient precision is reached. Each call will consume one sampled frame from the device buffer.</p>
<dl class="section note"><dt>Note</dt><dd>This function is in an alpha state!</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">id</td><td>Id with which the device of interest is sending </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fMin</td><td>Minimum drift encountered (parts per trillion) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fMax</td><td>Maximum drift encountered (parts per trillion) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fMean</td><td>Mean drift encountered (parts per trillion) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">fStd</td><td>Standard deviation (parts per trillion) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">n</td><td>Number of sampled frames used.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga1708e589eb731c11c82a621b2a070d1d">kvDiagResetClockOffsetCalculation()</a> </dd></dl>

</div>
</div>
<a id="ga61263295b3feaad95c257eef05a9579b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga61263295b3feaad95c257eef05a9579b">&#9670;&nbsp;</a></span>kvDiagDetachAnalyzer()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagDetachAnalyzer </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Detach the analyzer from the CAN channel handle.</p>
<dl class="section note"><dt>Note</dt><dd>Currently only one analyzer is supported.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd></dl>

</div>
</div>
<a id="ga348f389077d77b8fd4cf04ad53558aad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga348f389077d77b8fd4cf04ad53558aad">&#9670;&nbsp;</a></span>kvDiagGetAnalyzerInfo()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagGetAnalyzerInfo </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structkv_analyzer_info__t.html">kvAnalyzerInfo_t</a> *&#160;</td>
          <td class="paramname"><em>info</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Get analyzer info.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel. </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">info</td><td>for analyzer info.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga348f389077d77b8fd4cf04ad53558aad">kvDiagGetAnalyzerInfo()</a> </dd></dl>

</div>
</div>
<a id="ga926f63f2ccb0b56ff4917151ab5e27fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga926f63f2ccb0b56ff4917151ab5e27fe">&#9670;&nbsp;</a></span>kvDiagGetNumberOfAnalyzers()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagGetNumberOfAnalyzers </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>analyzerCount</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Get the number of analyzers.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">analyzerCount</td><td>Number of analyzers.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga926f63f2ccb0b56ff4917151ab5e27fe">kvDiagGetNumberOfAnalyzers()</a> </dd></dl>

</div>
</div>
<a id="ga43a268ee89c38c3ac496d20f35a48105"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga43a268ee89c38c3ac496d20f35a48105">&#9670;&nbsp;</a></span>kvDiagReadSample()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagReadSample </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structkv_diag_sample.html">kvDiagSample</a> *&#160;</td>
          <td class="paramname"><em>sample</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Run with <a class="el" href="kv_diag_8h.html#ad24c2e14068b790b7b105c6423e42400">DIAG_PROGRAM_TYPE_NORMAL</a>, see <a class="el" href="page_user_guide_kvdiag.html">CANtegrity API (kvDiag)</a>.</p>
<p>Read (and consume) one full sample from an analyzer.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">sample</td><td>Pointer to struct to receive the sample.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a734089f351bc421c230bf8b6cd9b1e8e">canERR_NOMSG</a> (negative) if there was no message available. </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gaab9b2bc0856a7200d1f76533092eb023">kvDiagReadSampleWait()</a> </dd></dl>

</div>
</div>
<a id="gaab9b2bc0856a7200d1f76533092eb023"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaab9b2bc0856a7200d1f76533092eb023">&#9670;&nbsp;</a></span>kvDiagReadSampleWait()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagReadSampleWait </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structkv_diag_sample.html">kvDiagSample</a> *&#160;</td>
          <td class="paramname"><em>sample</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>timeout</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Run with <a class="el" href="kv_diag_8h.html#ad24c2e14068b790b7b105c6423e42400">DIAG_PROGRAM_TYPE_NORMAL</a>, see <a class="el" href="page_user_guide_kvdiag.html">CANtegrity API (kvDiag)</a>.</p>
<p>Read (and consume) one full sample from an analyzer. Will wait until a message arrives or a timeout occurs.It can take up to 100 ms for this function to return after a new sample is available.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">sample</td><td>Pointer to struct to receive the sample. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">timeout</td><td>Number of milliseconds to wait for the next sample.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a734089f351bc421c230bf8b6cd9b1e8e">canERR_NOMSG</a> (negative) if there was no message available. </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga43a268ee89c38c3ac496d20f35a48105">kvDiagReadSample()</a> </dd></dl>

</div>
</div>
<a id="ga65bbdc1e8c8bf4affc8ba2041d72ff1a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga65bbdc1e8c8bf4affc8ba2041d72ff1a">&#9670;&nbsp;</a></span>kvDiagResetBitrateCalculation()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagResetBitrateCalculation </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Resets the bitrate calculation of <a class="el" href="group__kvdiag__diagnostics.html#gabc77cf695c7fb518263d32539a3aec9e">kvDiagCalculateBitrate()</a>.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#gabc77cf695c7fb518263d32539a3aec9e">kvDiagCalculateBitrate()</a> </dd></dl>

</div>
</div>
<a id="ga1708e589eb731c11c82a621b2a070d1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1708e589eb731c11c82a621b2a070d1d">&#9670;&nbsp;</a></span>kvDiagResetClockOffsetCalculation()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagResetClockOffsetCalculation </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Resets the clock offset calculation of <a class="el" href="group__kvdiag__diagnostics.html#ga243548139dcbb64ff273648dd0c370dd">kvDiagCalculateClockOffset()</a>.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga243548139dcbb64ff273648dd0c370dd">kvDiagCalculateClockOffset()</a> </dd></dl>

</div>
</div>
<a id="gad615ea3768542e4d48f10d0dca4ef46d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad615ea3768542e4d48f10d0dca4ef46d">&#9670;&nbsp;</a></span>kvDiagSetProgram()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagSetProgram </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>programType</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *const&#160;</td>
          <td class="paramname"><em>configBuffer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Choose analyzer program to run.</p>
<p><code>configBuffer</code> is a JSON string containing configuration parameters. The following is an example configuration yielding a bitrate of 1MBit/s: </p><div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span> *configBuffer = <span class="stringliteral">&quot;{\&quot;tseg1\&quot; : 59, \&quot;tseg2\&quot; : 20, \&quot;sjw\&quot; : 16, \&quot;brp\&quot; : 1}&quot;</span>;</div></div><!-- fragment --><p> where </p><div class="fragment"><div class="line">tseg1     Time segment 1, that is, the number of quanta from (but not</div><div class="line">          including) the Sync Segment to the sampling point.</div><div class="line"></div><div class="line">tseg2     Time segment 2, that is, the number of quanta from the sampling</div><div class="line">          point to the end of the bit.</div><div class="line"></div><div class="line">sjw       The Synchronization Jump Width.</div><div class="line"></div><div class="line">brp       Bitrate prescaler.</div></div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analayzer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">programType</td><td>Analyzer program, either <a class="el" href="kv_diag_8h.html#ad24c2e14068b790b7b105c6423e42400">DIAG_PROGRAM_TYPE_NORMAL</a> or <a class="el" href="kv_diag_8h.html#a64bb36d4e56a896eb2af5dc09cce1542">DIAG_PROGRAM_TYPE_AUTOBAUD</a>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">configBuffer</td><td>A configuration string in JSON format specifying bus parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success. </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure. </dd></dl>

</div>
</div>
<a id="ga9cb62a80b9ffe4ea80b22acfb49bd3a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">&#9670;&nbsp;</a></span>kvDiagStart()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagStart </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Start data acquisition.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga685c95a3e168601a28e680d9c820dd8a">kvDiagStop()</a> </dd></dl>

</div>
</div>
<a id="ga685c95a3e168601a28e680d9c820dd8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga685c95a3e168601a28e680d9c820dd8a">&#9670;&nbsp;</a></span>kvDiagStop()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7">canStatus</a> kvDiagStop </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="canlib_8h.html#ae3d1b041d62207d5336f93c089cd5b65">canHandle</a>&#160;</td>
          <td class="paramname"><em>canHnd</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Stop data acquisition.</p>
<dl class="section note"><dt>Note</dt><dd>The kvDiag API is preliminary and will change!</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">canHnd</td><td>An open handle to a CAN channel with an attached analyzer.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="canstat_8h.html#a52b5e5c71832b0bd3c6a5b1fd48583e7a49743d0d438957118b9c6af2e831b209">canOK</a> (zero) if success </dd>
<dd>
<a class="el" href="canstat_8h.html#canERR_xxx">canERR_xxx</a> (negative) if failure</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__kvdiag__diagnostics.html#ga76d09ccb89cf756d954144582f730330">kvDiagAttachAnalyzer()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#gad615ea3768542e4d48f10d0dca4ef46d">kvDiagSetProgram()</a> </dd>
<dd>
<a class="el" href="group__kvdiag__diagnostics.html#ga9cb62a80b9ffe4ea80b22acfb49bd3a4">kvDiagStart()</a> </dd></dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.13-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer"> (canlib 5.38) Tue Feb 15 2022</li>
  </ul>
</div>
</body>
</html>
